// 存放 文章相关 的接口

const express = require('express');
const router = express.Router();

const db = require('../db');

/********************* 分页获取文章列表数据接口 *********************/
// 接口要求：
/**
 * 请求方式：GET
 * 请求的url：/my/article/list
 * 请求参数：
 *  - pagenum -- 页码值
 *  - pagesize -- 每页显示多少条数据
 *  - cate_id -- 文章分类的Id
 *  - state -- 文章的状态，可选“草稿”或“已发布”
 */
router.get('/list', (req, res) => {
  // console.log(req.query);
  // 设置变量，接收请求参数
  let { pagenum, pagesize, cate_id, state } = req.query;
  // console.log(cate_id, state);
  // 根据cate_id 和 state制作SQL语句的条件
  let w = '';
  if (cate_id) {
    w += ` and cate_id=${cate_id} `;
  }
  if (state) {
    w += ` and state='${state}' `;
  }
  // 分页查询数据的SQL（该SQL用到了连表查询，并且使用了很多变量组合）
  let sql1 = `select a.id, a.title, a.state, a.pub_date, c.name cate_name from article a
  join category c on a.cate_id=c.id
  where author_id=${req.user.id} and is_delete=0 ${w}
  limit ${(pagenum - 1) * pagesize}, ${pagesize}`;
  // console.log(sql1)
  // 查询总记录数的SQL，查询条件和前面查询数据的条件 必须要一致
  let sql2 = `select count(*) total from article a
  join category c on a.cate_id=c.id
  where author_id=${req.user.id} and is_delete=0 ${w}`;
  // console.log(sql2)
  // 分别执行两条SQL（因为db查询数据库是异步方法，必须嵌套查询）
  db(sql1, (err, result1) => {
    if (err) throw err;
    db(sql2, (e, result2) => {
      if (e) throw e;
      res.send({
        status: 0,
        message: '获取文章列表数据成功',
        data: result1,
        total: result2[0].total
      });
    })
  })
});



// ---------------- 添加文章接口 --------------------
/**
 * 接口地址：/my/article/add
 * 请求方式：POST
 * 请求体：title | content | cate_id | state | cover_img
 * Content-Type: multipart/form-data
 */
const moment = require('moment');
const multer = require('multer'); // 加载multer
const upload = multer({ dest: 'uploads/' }); // 配置上传文件的目录

// router.post('/xxx', 中间件函数， 中间件函数， 中间件函数....);

router.post('/add', upload.single('cover_img'), (req, res) => {
  // console.log(req.body); // 客户端提交的文本信息 
  // req.body = { title: 'xx', content: 'xx', cate_id: 2, state: 'xx' }
  // console.log(req.file); // { filename: '20dc6af2e8c432c271c6051b7cd3a84d' }
  let { title, content, cate_id, state } = req.body;
  let filename = req.file.filename;
  // 发布时间，客户端没有提交，所以自己处理
  let pub_date = moment().format('YYYY-MM-DD HH:mm:ss');
  // 数据表 article 中要求添加的字段，必须填
  let sql = `insert into article set title='${title}', content='${content}', cover_img='${filename}', cate_id=${cate_id}, state='${state}', author_id=${req.user.id}, pub_date='${pub_date}'`;
  db(sql, (err, result) => {
    if (err) throw err;
    res.send({ status: 0, message: '添加文章成功' })
  });
});


// ---------------- 删除文件接口 --------------------
/**
 * 请求方式：GET
 * 接口地址：/my/article/delete/2
 * 请求参数：id，url参数
 */
// /my/article/delete/2/20/zhangsan
// router.get('/delete/:id/:age/:name', (req, res) => {});
router.get('/delete/:id', (req, res) => {
  // console.log(req.params);
  // return;
  // 通过 req.parmas 来获取url参数
  // console.log(req.params); // { id: '3' }
  let id = req.params.id;
  // let sql = `delete from article where id=${id}`;
  let sql = `update article set is_delete=1 where id=${id}`;
  db(sql, (err, result) => {
    if (err) throw err;
    if (result.affectedRows > 0) {
      res.send({ status: 0, message: '删除文章成功' })
    } else {
      res.send({ status: 1, message: '删除文章失败' })
    }
  });
});


router.post('/update', upload.single('cover_img'), (req, res) => {
  // 和添加文章接口差不多，要注意，客户端多提交了文章id，这是我们修改文章的条件
  // req.body = { title: 'xx', content: 'xx', cate_id: 1, state: 'xx', id: 6 }
  let { title, content, cate_id, state, id } = req.body;
  // 其他字段（发布时间，不是修改时间，所以不需要改了，用户id也不需要改）
  let cover_img = req.file.filename;
  // console.log(obj);
  // return;
  let sql = `update article set title='${title}', content='${content}', cate_id=${cate_id}, state='${state}', cover_img='${cover_img}' where id=${id}`;
  db(sql, (err, result) => {
    if (err) throw err;
    if (result.affectedRows > 0) {
      res.send({ status: 0, message: '修改文章成功' })
    } else {
      res.send({ status: 1, message: '修改文章失败' })
    }
  })
});


// ---------------- 根据id获取一篇文章接口 -----------
router.get('/:id', (req, res) => {
  // 怎么获取url中的参数，答，使用express提供的 req.params
  // console.log(req.params.id);
  db('select * from article where id=' + req.params.id, (err, result) => {
    if (err) throw err;
    res.send({
      status: 0,
      message: '获取文章成功',
      data: result[0]
    })
  })
});

module.exports = router;